package com.myk.game.gobangchess.ai.symmetric;

/**
 * 文件名: BoardPrinter.java
 * 类名: BoardPrinter
 * 功能: 提供一个静态方法，用于在命令行中打印带索引的15x15对称棋棋盘。
 */
public class BoardPrinter {

    private static final int BOARD_SIZE = 15;

    /**
     * 在命令行中打印带索引的棋盘，方便调试和验证。
     * 棋盘上方显示列索引（0-14），左侧显示行索引（0-14）。
     *
     * @param board int[][] 类型的二维数组，代表15x15的棋盘。
     *              - 棋盘大小: 15x15。
     *              - 元素值: 1 代表黑棋，-1 代表白棋，0 代表空位。
     */
    public static void printBoardWithIndices(int[][] board) {
        // 检查输入是否有效，以增加健壮性
        if (board == null || board.length != BOARD_SIZE || board[0].length != BOARD_SIZE) {
            System.out.println("错误: 传入的棋盘格式不正确，必须是 15x15 的 int[][] 数组。");
            return;
        }

        System.out.println("\n===== 当前棋盘状态 =====");

        // 打印列索引
        System.out.print("   "); // 为行索引留出空间
        for (int i = 0; i < BOARD_SIZE; i++) {
            System.out.printf("%-3d", i);
        }
        System.out.println("\n-------------------------------------------------");

        // 打印行索引和棋盘内容
        for (int i = 0; i < BOARD_SIZE; i++) {
            System.out.printf("%-2d|", i); // 左对齐，占2位
            for (int j = 0; j < BOARD_SIZE; j++) {
                System.out.printf("%-3d", board[i][j]); // 左对齐，占3位
            }
            System.out.println();
        }
        System.out.println("========================\n");
    }

    /**
     * 主函数，用于调用和验证 printBoardWithIndices 函数。
     */
    public static void main(String[] args) {
        // 1. 定义一个15x15的显式棋盘矩阵用于测试
        int[][] testBoard = {
            //0  1  2  3  4  5  6  7  8  9 10 11 12 13 14
            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 0
            { 0, 1, 1, 0, 0, 0, 0,-1, 0, 0, 0,-1,-1, 0, 0}, // 1
            { 0, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0, 0,-1, 0, 0}, // 2
            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 3
            { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 4
            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 5
            { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, // 6
            { 0, 0, 0, 0, 0,-1, 0, 0, 1, 0, 0,-1, 0, 0, 0}, // 7
            { 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0,-1, 0, 0, 0}, // 8
            { 0, 0, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0}, // 9
            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 10
            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 11
            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 12
            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 13
            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}  // 14
        };

        // 2. 调用打印函数进行验证
        System.out.println("====== 调用棋盘打印函数进行验证 ======");
        printBoardWithIndices(testBoard);
    }
}